package main

import "fmt"

/*
函数指针: 一个指针，指向了一个函数的指针
         因为go语言中，function默认看作一个指针，没有*。

指针函数：一个函数，该函数的返回值是一个指针
*/

func main1() {
	demo := make([]int, 0)
	// 指针传递,传递的是地址值
	test(&demo)
	fmt.Println(demo) //[1,2,3]

	demo2 := make([]int, 0, 8)
	// 传递的是切片的底层数组
	test2(demo2)
	fmt.Println(demo2) // []

	// 奇怪这边为啥修改值能够成功,切片是引用传递
	demo3 := []int{1, 3, 4, 5, 5}
	fmt.Printf("%p", &demo3)
	fmt.Println()
	test3(demo3)
	fmt.Println(demo3)
}

func main() {
	demo3 := make([]int, 0, 8)
	demo3 = append(demo3, 1)
	test3(demo3)
	fmt.Println(demo3)
}

func test3(arr []int) {
	//fmt.Printf("%p", &arr)
	//fmt.Printf("%T", arr)
	//fmt.Println("111111111")
	//fmt.Println(arr)
	arr = append(arr, 2)
	arr[0] = 1000
}

func test(arr *[]int) {
	*arr = append(*arr, 1)
	*arr = append(*arr, 2)
	*arr = append(*arr, 3)
}

func test2(arr []int) {
	fmt.Println("test2")
	arr = append(arr, 1)
	arr = append(arr, 2)
	arr = append(arr, 3)
	fmt.Println(arr)
}
